package com.liqi.frame.comm.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.liqi.frame.comm.base.BaseService;
import com.liqi.frame.comm.po.Group;

import java.util.List;

/**
 * 组织服务接口
 * @author liqi on 2018/1/31.
 * liqiwork@qq.com
 */
public interface GroupService extends BaseService<Group> {
    /**
     * 取指定组织id的组织和其子级组织
     * @param groupId 组织id
     * @return 组织和其子级组织列表
     */
    List<Group> getGroupAndSonsByGroupId(String groupId);

    /**
     * 取指定组织id的子级组织
     * @param groupId 父组织id
     * @return 子级组织列表
     */
    List<Group> getSonsByGroupId(String groupId);

    /**
     * 取指定组织id的组织和其子级组织(模糊查询)
     * @param groupName 搜索的组织关键字
     * @param groupId 当前用户的组织id
     * @return 组织和其子级组织列表
     */
    List<Group> getGroupListWithName(String groupName, String groupId);
    IPage<Group> getGroupListWithName(String groupName, String groupId, Page<Group> page);

    /**
     * 取指定组织id的子级组织(精确查询)
     * @param groupName 组织名称
     * @param parentId 父组织id
     * @return 子级组织列表
     */
    List<Group> getGroupListByName(String groupName, String parentId);

    /**
     * 按id取组织对象
     * @param id 组织id
     * @return 组织对象
     */
    Group getGroupById(String id);

    /**
     * 修改指定组织的序号
     * @param id 组织id
     * @param orderId 序号
     * @return 1：成功
     */
    int updateOrderId(String id,
                      Float orderId);

    /**
     * 插入组织信息
     * @param id 组织id
     * @param groupName 组织名称
     * @param comment 说明
     * @param orderId 序号
     * @param parentId 父组织id
     * @param parentName 父组织名称
     * @return 结果
     */
    int insertGroup(String id,
                    String groupName,
                    String comment,
                    Float orderId,
                    String parentId,
                    String parentName);

    /**
     * 修改指定组织id的信息
     * @param id 组织id
     * @param groupName 组织名称
     * @param comment 说明
     * @param orderId 序号
     * @param parentId 父组织id
     * @param parentName 父组织名称
     * @return 结果
     */
    int updateGroup(String id,
                    String groupName,
                    String comment,
                    Float orderId,
                    String parentId,
                    String parentName);

    /**
     * 删除指定id的组织
     * @param id 组织id
     * @return 1:成功
     */
    int deleteGroupById(String id);

    /**
     * 取得所有组织对象
     * @return 组织对象列表
     */
    List<Group> getGroupList();

    /**
     * 取指定组织id的子级组织
     * @param parentId
     * @return
     */
    List<Group> getGroupListByParentId(String parentId);
}
